#ifndef SERVIDOR_H_
#define SERVIDOR_H_
#include <list>

#include "ClientManager.h"


class Servidor :public Thread {
private:
	char* puerto;
	bool OK;
	bool terminado;
	Socket socket;
	std::list<ClientManager*> L_ClienteManager;
	std::list<Circuito*> L_circuitos_en_memoria;
	Mutex mutex_lista;

public:
	Servidor(char* port);
	virtual ~Servidor(){};

//-------Metodos para la Comunicacion--------//
//(Llaman a los metodos de mismo nombre del socket del server)//
	int Bind();
	int Listen();
	Socket* Accept();
	int Shutdown(int how);
	int Close();

//----------Metodos Funcionales----------//
	/*OK: Devuelve true si no ocurrieron errores en el servidor*/
	bool isOK(){return OK;};

	/*terminar: pone en true el atributo terminado*/
	void terminar(){terminado=true;};

	/*run: lanza la rutina que corre el server*/
	void* run();

	/*LiberarRecursos: Se encarga de realizar los join para todos los
	*	hilos lanzados, y liberar su memoria de la lista*/
	void LiberarRecursos();

};

#endif /* SERVIDOR_H_ */
